import Axios from 'axios';
import Qs from 'qs';
import {ipconfig} from './ipconfig';
import {clearStore,getUser,removelocalStore} from './tools.js';
import {Indicator,Toast,MessageBox } from "mint-ui";
import router from '../../router';

let apiUrl = ipconfig.apiUrl;

let num = 0;
Axios.interceptors.request.use(config => {
  // 这里可以加一些动作, 比如来个进度条开始动作,
  num++;
  Indicator.open();
  return config
}, error => {
  return Promise.reject(error);
});

Axios.interceptors.response.use(response => {
  num--;
  if(num<=0){
    Indicator.close();
  }
  return response;
}, error => {
  // 这里我们把错误信息扶正, 后面就不需要写 catch 了
  return Promise.resolve(error.response)
});

function checkStatus(response) {
  // 如果 http 状态码正常, 则直接返回数据
  if (response.status === 200 || response.status === 304) {
    return response;
    // 这里, 如果不需要除 data 外的其他数据, 可以直接 return response.data, 这样可以让后面的代码精简一些
  }
  // 异常状态下, 把错误信息返回去
  // 因为前面我们把错误扶正了, 不然像 404, 500 这样的错误是走不到这里的
  return {
    data: {
      code: -404,
      message: response.statusText,
      data: response.statusText,
    }
  }
}

function checkCode(res) {
  // 如果状态 code 异常(这里已经包括网络错误, 服务器错误, 后端抛出的错误), 可以弹出一个错误提示, 告诉用户
  let code = res.data.reqResult.code;
  if(code < 0 ){
    if(code == -9981){
      clearStore();
      removelocalStore('user');
      router.push({name:'login'});
    }
    // Toast(res.data.reqResult.msg);
    return res;
  }
  return res;
}

export default {
  post(url, data, dataType) {
    let user = getUser();
    let ContentType=null;
    if(dataType=='json'){
      data = JSON.stringify(data);
      ContentType = 'application/json; charset=UTF-8';
    }else if(dataType=='formData'){
      data = data;
    }else {
      data = Qs.stringify(data);
      ContentType = 'application/x-www-form-urlencoded; charset=UTF-8';
    }
    return Axios({
      method: 'post', // 请求协议
      url: apiUrl+url, // 请求的地址
      data: data, // post 请求的数据
      timeout: 30000, // 超时时间, 单位毫秒
      headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Type': ContentType,
        'userToken':user?user.userToken:""
      }
    }).then(checkStatus).then(checkCode)
  },
  get(url, params) {
    let user = getUser();
    return Axios({
      method: 'get',
      url: apiUrl+url,
      params, // get 请求时带的参数
      timeout: 30000,
      headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'userToken':user?user.userToken:""
      }
    }).then(checkStatus).then(checkCode)
  },
  all(data){
    return Axios.all(data).then(Axios.spread((acct,perms)=>{

    }))
  }
}
